MACHINE ALLOCATION OPTIMIZATION
import pandas as pd
import re
import gurobipy as gp
data=pd.read_csv("/Users/ibironkeafolabi/Desktop/SMU_School_work /MBAN_5540/Casestudynumbers.csv")
years=[2013,2014,2015,2016,2017]
centers=list(data["Center"])
mac_year=[4,3,5,2,2]
#decision varible for each machine in each year for each center:
mac_var=[]
temp=1
for m,year in zip(mac_year,years):
for t in range(m):
for c in centers:
print(f"M_{temp}_{c}_{year}")
mac_var.append(f"M_{temp}_{c}_{year}")
temp+=1
por_var=[]
for y in years:
for c in centers:
for i in [1,2]:
por_var.append(f"P_{i}_{c}_{y}")
demand={}
for c in centers:
for y in years:
demand[f"{c}_{y}"]=int(data[data["Center"]==c][f"{y}"])
empty_room=[0,1,0,2,1,1,2,1,1,1,0,1,1,1,3,0] # Centers with rooms ready for a machine installation
ava_mac=[1,5,6,4,11,9,6,5,2,3,13,12,16,3,3,3] # Number of available machines in each center at the beginning of 2013
model= gp.Model()
added_mac_var={}
for m in mac_var:
added_mac_var[m]=model.addVar(name=m,vtype='B')
added_por_var={}
for p in por_var:
added_por_var[p]=model.addVar(name=p,vtype='B')
#cal_mach_each center_each year:
n={}
por_n={}
for c in centers:
for y in years:
r = re.compile(f".*_{c}_{y}")
newlist = list(filter(r.match, added_mac_var))
temp=0
print(newlist)
for t in newlist:
temp=temp+added_mac_var[t]
n[f"n_{c}_{y}"] = temp
newlist = list(filter(r.match, added_por_var))
temp=0
for t in newlist:
temp=temp+added_por_var[t]
# print(newlist)
por_n[f"pn_{c}_{y}"] = temp
obj=[]
for y in years:
for c in centers:
d=demand[f"{c}_{y}"]
his_mac=ava_mac[c-1]
# print(his_mac)
total_machine=his_mac
total_port=por_n[f"pn_{c}_{y}"]
temp_y=y
while temp_y>=2013:
total_machine=total_machine+n[f"n_{c}_{temp_y}"]
# print(f"n_{c}_{temp_y}")
# print(n[f"n_{c}_{temp_y}"])
temp_y-=1
# print(total_machine)
untread = (d - (426*(total_machine+total_port)))**2
print(untread)
obj.append(untread)
total_machine_per_center=[]
for c in centers:
t=0
for y in years:
for m in range(1,17):
if f"M_{m}_{c}_{y}" in added_mac_var.keys():
t=t+added_mac_var[f"M_{m}_{c}_{y}"]
print(t)
total_machine_per_center.append(t)
for e,t in zip(empty_room,total_machine_per_center):
model.addConstr( t <= e)
total_machine_per_year=[]
for y in years:
r = re.compile(f".*_{y}")
newlist = list(filter(r.match, added_mac_var.keys()))
print(newlist)
temp=0
for i in newlist:
temp=temp+added_mac_var[i]
total_machine_per_year.append(temp)
print(total_machine_per_year)
for ma,ty in zip(mac_year,total_machine_per_year):
model.addConstr( ty == ma )
total_por_machine_per_year=[]
for y in years:
r = re.compile(f".*_{y}")
newlist = list(filter(r.match, added_por_var.keys()))
# print(newlist)
temp_p1=0
temp_p2=0
for i in newlist:
if i[:3] == "P_1":
# print("p1")
temp_p1=temp_p1+added_por_var[i]
else:
# print("p2")
temp_p2=temp_p2+added_por_var[i]
# print(temp_p1)
# print(temp_p2)
total_por_machine_per_year.append(temp_p1)
total_por_machine_per_year.append(temp_p2)
# print(total_por_machine_per_year)
print(total_por_machine_per_year)
len(total_por_machine_per_year)
for tpy in total_por_machine_per_year:
model.addConstr( tpy == 1 )
each_mac_once=[]
for m in range(1,17):
r = re.compile(f"^M_{m}_")
newlist = list(filter(r.match, added_mac_var.keys()))
# print(newlist)
temp=0
for i in newlist:
temp=temp+added_mac_var[i]
each_mac_once.append(temp)
print(each_mac_once)
for em in each_mac_once:
model.addConstr( em == 1 )
model.setObjective(sum(obj), gp.GRB.MINIMIZE)
model.update()
model.optimize()
def print_model(model):
for i in model.getVars():
if i.x == 1:
print(i.VarName, i.x)
print("Solution:", model.objVal)
print_model(model)
model.write("model_Group1.lp")